package bierki;
import java.awt.geom.*;
import java.util.*;

public class Pionek extends Bierka{

	private boolean firstMove = true;
	
	public Pionek(String nazwaPlikuGraficznego,int symbol){
		super(nazwaPlikuGraficznego,symbol); 
	}
	
	public Pionek(String obrazek,BierkaKolor kolor, int x, int y) {
		super(obrazek,BierkaTyp.PIONEK,kolor,x, y);
	}
	
	public boolean sprawdzRuch(Bierka[][] szachownica,int xk, int yk) {
		
		if (pozaSzachownica(xk,yk)) return false;
		
		if (sprawdzBicie(szachownica[xk][yk])) return false;
		
		if (szachownica[xk][yk] == null) { 
			
			if (x != xk ) return false;
			
			if (kolor == BierkaKolor.BIALY && yk - y != -1) {
				if (!firstMove && yk - y == -2) return false;
				if (yk - y != -2) return false;
				
			}
			if (kolor == BierkaKolor.CZARNY && yk - y != 1) {
				if (!firstMove && yk - y == 2) return false;
				if (yk - y != 2) return false;
			}
			
			if (firstMove && 
					Math.abs(yk - y) == 2 && 
					szachownica[x][ y + (int)Math.signum(yk-y) ] != null) return false;
			
		} else { 
			
			if (szachownica[xk][yk].getKolor() == kolor) return false; 
			
			if ( x + 1 != xk && x - 1 != xk)  return false;
			
			if (kolor == BierkaKolor.BIALY && yk - y != -1 ) return false;
			if (kolor == BierkaKolor.CZARNY && yk - y != 1 ) return false;
					
		} 
		
		
		return true;
	}
	
	
	public boolean sprawdzRuch(Bierka[][] szachownica,int xk, int yk, Krol krol) {
		
		if (pozaSzachownica(xk,yk)) return false;
		
		if (sprawdzBicie(szachownica[xk][yk])) return false;
		
		if (szachownica[xk][yk] == null) { 
			
			if (x != xk ) return false;
			
			if (kolor == BierkaKolor.BIALY && yk - y != -1) {
				if (!firstMove && yk - y == -2) return false;
				if (yk - y != -2) return false;
				
			}
			if (kolor == BierkaKolor.CZARNY && yk - y != 1) {
				if (!firstMove && yk - y == 2) return false;
				if (yk - y != 2) return false;
			}
			
			if (firstMove && 
					Math.abs(yk - y) == 2 && 
					szachownica[x][ y + (int)Math.signum(yk-y) ] != null) return false;
			
		} else { 
			
			if (szachownica[xk][yk].getKolor() == kolor) return false; 
			
			if ( x + 1 != xk && x - 1 != xk)  return false;
			
			if (kolor == BierkaKolor.BIALY && yk - y != -1 ) return false;
			if (kolor == BierkaKolor.CZARNY && yk - y != 1 ) return false;
					
		} 
		
		if (sprawdzSzach(szachownica,xk,yk,krol)) return false;
		
		return true;
	}
	
	@Override
	public void move(int x, int y) {
		super.move(x, y);
		firstMove = false;
	}

	/**
	 * obsolete, nie jest używna, napisana jako alternatywna metoda sprawdzania ruchów
	 * potem z niej zrezygnowano
	 */
	public Vector<Point2D> validateMove(Bierka[][] szachownica,int xp, int yp){
		Vector<Point2D> prawidloweRuchy = new Vector<Point2D>();
		if(xp>0 && yp >0 && yp<7 && xp<7){
			if(this.getSymbol()==1){
				//czarnypionek ruchy
				if(szachownica[xp][yp+1]==null)
					prawidloweRuchy.add(new Point2D.Float(xp,yp+1));
				if(szachownica[xp][yp+2]==null && xp==1) //pierwszy ruch mozna o 2
					prawidloweRuchy.add(new Point2D.Float(xp,yp+2));
				//a ponizej bicia
				if(xp>0)
					if(szachownica[xp-1][yp+1].getSymbol()<0) //jest tam cos bialego
						prawidloweRuchy.add(new Point2D.Double(xp-1,yp+1));
				if(xp<7)
					if(szachownica[xp+1][yp+1].getSymbol()<0) //jest tam cos bialego
						prawidloweRuchy.add(new Point2D.Double(xp+1,yp+1));
			}
			else if(this.getSymbol()==-1){//bialypionek ruchy
				if(szachownica[xp][yp-1]==null)
					prawidloweRuchy.add(new Point2D.Float(xp,yp-1));
				if(szachownica[xp][yp-2]==null && xp==6) //pierwszy ruch mozna o 2
					prawidloweRuchy.add(new Point2D.Float(xp,yp-2));
//				a ponizej bicia
				if(xp>0)
					if(szachownica[xp+1][yp-1].getSymbol()>0) //jest tam cos czarnego
						prawidloweRuchy.add(new Point2D.Double(xp-1,yp-1));
				if(xp<7)
					if(szachownica[xp-1][yp-1].getSymbol()<0) //jest tam cos czarnego
						prawidloweRuchy.add(new Point2D.Double(xp+1,yp-1));
			}
		}
		return prawidloweRuchy;
	}
}
